/**
 * 给定一个非负整数数组 nums ，你最初位于数组的 第一个下标 。
 * 数组中的每个元素代表你在该位置可以跳跃的最大长度。
 * 判断你是否能够到达最后一个下标。
 */
public class Test55 {

    public static void main(String[] args) {
        int[] nums = {2,0,0};
        canJump(nums);
    }
    public static boolean canJump(int[] nums) {
        if (nums == null || nums.length == 0 || nums.length == 1) return true;

        int[] max = new int[nums.length];

        max[0] = nums[0];
        if (max[0] == 0) return false;

        for (int i = 1; i < nums.length; i++) {
            if (nums[i] + i >= max[i-1]){
                if (nums[i] == 0 && i < nums.length-1) return false;
                max[i] = nums[i] + i;
            }else{
                max[i] = max[i-1];
            }
        }

        if (max[max.length-1] >= max.length-1) return true;

        return false;
    }
}
